/**
 * @param {string[]} strs
 * @return {string[][]}
 */
// 方法1依旧是hash表，无非是怎么设计key值
// 26个小写字母[0, 0, 0, .... , 0]
// 对应字母出现一次就+1，最后拼成一个完整的字符串，比如abc
// [1, 1, 1, 0, 0, ... , 0]
// 0 10
// 0 1注意这两个拼接后的问题，所以需要插入符号
var groupAnagrams1 = function(strs) {
    const map = new Map()
    for(let i = 0; i < strs.length; i++) {
        let str = strs[i]
        let tempArr = new Array(26).fill(0)
        for(let j = 0; j < str.length; j++) {
            tempArr[str.charCodeAt(j) - 97]++
        }
        tempArr = tempArr.join(',')
        if(map.has(tempArr)) {
            map.get(tempArr).push(str)
        } else {
            map.set(tempArr, [str])
        }
    }
    return [...map.values()]
}
// 方法2（自己写）的，对每个字串进行排序，拿到排序后的字符串后，将其作为Map的key，如果key存在
// 说明有分类相同的，如果没有，就设置，将自己放进去。 复杂度 o(nklogk)
var groupAnagrams2 = function (strs) {
    const map = new Map()
    for (let i = 0; i < strs.length; i++) {
        let str = sortStr(strs[i])
        if(map.has(str)) {
            map.get(str).push(strs[i])
        } else {
            map.set(strs[i], [])
        }
    }
    let ans = []
    for(let val of map.values()) {
        ans.push(val)
    }
};
var sortStr = function (strs) {
    let arr = strs.split('')
    arr.sort()
    return arr.join('')
}
console.log(groupAnagrams1(["bdddddddddd","bbbbbbbbbbc"]));